Dashboard Temp Share Shortlinks Frames API

HTMLify

438. Find All Anagrams in a String.java
Views: 1 | Author: cody
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 438. Find All Anagrams in a String

class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        int slen=s.length();
        int plen=p.length();
        List<Integer> ans=new ArrayList<>();
        int matchCount=0;
        HashMap<Character,Integer> smap=new HashMap<>();
        HashMap<Character,Integer> pmap=new HashMap<>();
        if(plen > slen){
            return new ArrayList<>();
        }
        for(int i=0;i<plen;i++){
            pmap.put(p.charAt(i),pmap.getOrDefault(p.charAt(i),0)+1);
        }

        for(int i=0;i<plen;i++){
            smap.put(s.charAt(i),smap.getOrDefault(s.charAt(i),0)+1);
            if(smap.get(s.charAt(i))<=pmap.getOrDefault(s.charAt(i),0)){
                matchCount++;
            }
        }
        if(matchCount == plen)
        ans.add(0);

        int sp=0;
        int ep=plen;

        while(ep<slen){
            smap.put(s.charAt(ep),smap.getOrDefault(s.charAt(ep),0)+1);
            if(smap.get(s.charAt(ep)) <= pmap.getOrDefault(s.charAt(ep),0)){
                matchCount++;
            }
            smap.put(s.charAt(sp),smap.get(s.charAt(sp))-1);
            if(smap.get(s.charAt(sp)) < pmap.getOrDefault(s.charAt(sp),0)){
                matchCount--;
            }
            if(matchCount == plen){
                ans.add(sp+1);
            }
            sp++;
            ep++;
        }
        return ans;
    }
}